<%@page language="java" import="java.sql.*" %>
<%
Integer userId=(Integer)request.getSession(false).getAttribute("id");
dbBean.DBConnectionManager connMgr=(dbBean.DBConnectionManager)application.getAttribute("connMgr");
if((userId==null) || (connMgr==null)) {
  application.log("- No existe una sesion de usuario o no se ha podido obtener una conexion con la BBDD");
%>
<html>
  <body onLoad="parent.location.href='/';">
  </body>
</html>
<%
} else {
String desde=(String)request.getParameter("desde");
String hasta=(String)request.getParameter("hasta");

if(desde==null)
	desde="";
if(hasta==null)
	hasta="";

Timestamp desdeTs=new Timestamp(0);
Timestamp hastaTs=new Timestamp(new java.util.Date().getTime());

if(desde!="") {
  try {
    desdeTs=Timestamp.valueOf(desde+":00.0");
  } catch(IllegalArgumentException e) {e.printStackTrace();}
}
if(hasta!="") {
  try {
    hastaTs=Timestamp.valueOf(hasta+":00.0");
  } catch(IllegalArgumentException e) {e.printStackTrace();}
}

Connection con=null;
StringBuffer datos=new StringBuffer();
 try {
  Timestamp timestamp=null;
  application.log("- Se va a consultar la ruta en la BBDD");
  con = connMgr.getConnection("mysql");
  PreparedStatement pstmt=null;
  if((desde=="") && (hasta=="")) {
      pstmt = con.prepareStatement("SELECT timestamp, latitud, longitud, velocidad, rumbo, altitud FROM datos WHERE UserId="+userId.toString()+";");
  } else {
      pstmt = con.prepareStatement("SELECT timestamp, latitud, longitud, velocidad, rumbo, altitud FROM datos WHERE UserId="+userId.toString()+" AND timestamp BETWEEN ? AND ?;");
      pstmt.setTimestamp(1, desdeTs);
      pstmt.setTimestamp(2, hastaTs);
  }
  ResultSet rs=pstmt.executeQuery();
  while(rs.next()) {
      datos.append("#");
      timestamp=rs.getTimestamp(1);
      datos.append(timestamp.toString());
      datos.append(";");
      datos.append(rs.getString(2));
      datos.append(";");
      datos.append(rs.getString(3));
      datos.append(";");
      datos.append(rs.getString(4));
      datos.append(";");
      datos.append(rs.getString(5));
      datos.append(";");
      datos.append(rs.getString(6));
  }
  rs.close();
  pstmt.close();
  application.log("- Se ha obtenido la ruta correctamente:"+datos.toString());

} catch (SQLException e) {
  application.log("GoogleGPS_offline_descargar.jsp",e);
}
if(con!=null)
  connMgr.freeConnection("mysql",con);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">

<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>

<title>Localizador GPS</title>
<style type="text/css">
    v\:* {
      behavior:url(#default#VML);
    }
</style>

<style type="text/css">
    .on {color:red}
    .off {color:black}
</style>

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=" type="text/javascript" charset="utf-8"></script>

<script language="javascript"  type="text/javascript">
//<![CDATA[

var http_request = false;

var map;
var gMarker=new GMarker(0, 0);
var points = [];
var gPolyline = new GPolyline([0 ,0], [0, 0]);
var time;
var ruta;
var datos="<%=datos.toString()%>";
var i=0;
var mostrarRuta=false;

var direccion=1;
var reproducir=true;
var timer;

function load() {
    if (GBrowserIsCompatible()) {

	map = new GMap2(document.getElementById("map"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(0, 0), 16);
	map.setMapType(G_HYBRID_MAP);

	ruta=datos.split("#");
	mueve();

    }
}

function mueve() {

    try {

      i=i+direccion;
      if(i<1)
	i=1;
      if(i>ruta.length-1)
	i=ruta.length-1;

      results=ruta[i].split(";");

      var grados;
      var latitudNMEA=results[1];
      var longitudNMEA=results[2];


      grados=Math.floor(latitudNMEA/1000000);
      if(grados<0)
	grados=grados+1;
      var latitud=(latitudNMEA/1000000-grados)/0.6+grados;
      grados=Math.floor(longitudNMEA/1000000);
      if(grados<0)
	grados=grados+1;
      var longitud=(longitudNMEA/1000000-grados)/0.6+grados;


      var point = new GLatLng(latitud, longitud);
      if(points.length>=1000)
	points.shift();
      points.push(point);

      if(mostrarRuta) {
	map.removeOverlay(gPolyline);
	gPolyline=new GPolyline(points);
	map.addOverlay(gPolyline);
      }

      map.removeOverlay(gMarker);
      gMarker=new GMarker(point, null);
      map.addOverlay(gMarker);

      var timestamp=results[0].split(" ");
      var fecha=timestamp[0];
      var hora=timestamp[1];
      var velocidad=Math.round(results[3] / 10);

      if(hora != time) {
        map.panTo(new GLatLng(latitud, longitud));
        time = hora;
      }

      document.datos.fecha.value=fecha;
      document.datos.hora.value=hora + " GMT";
      document.datos.velocidad.value=velocidad + " km/h";

      
    
    } catch (err) {alert(err.description);}
    if(reproducir==true)
      timer=window.setTimeout("mueve();", 1000);

}

function back() {
    direccion=-1;
    document.getElementById("forward").className="off";
    document.getElementById("back").className="on";
}


function play(boton) {
  if(reproducir) {
    boton.value="play";
    reproducir=false;
    clearTimeout(timer);
  } else {
    boton.value="stop";
    reproducir=true;
    mueve();
  }
}

function forward() {
    direccion=1;
    document.getElementById("forward").className="on";
    document.getElementById("back").className="off";
}

function step() {
    if(reproducir==false)
      mueve();
}

function fMostrarRuta(boton) {
    if(mostrarRuta) {
      map.removeOverlay(gPolyline);
      boton.value="Mostrar Ruta";
      mostrarRuta=false;
    } else {
      gPolyline=new GPolyline(points);
      map.addOverlay(gPolyline);
      boton.value="Ocultar Ruta";
      mostrarRuta=true;
    }
}


//]]>
</script>

</head>

<body onload="load()" onunload="GUnload()">
  <h2>Localizador GPS</h2>
  <hr>
  <div id="map" style="width: 500px; height: 300px"></div>

  <div id="datos">
  
    <input type="button" name="back" value="back" onClick="back();"/>
    <input type="button" name="play" value="stop" onClick="play(this);"/>
    <input type="button" name="forward" value="forward" onClick="forward();"/>&nbsp; &nbsp; &nbsp;
    <input type="button" name="step" value="step" onClick="step();"/> <br/>
    <input type="button" name="mostrarRuta" value="Mostar Ruta" onClick="fMostrarRuta(this);"/>

    <br/><br/>
    <form name="datos" action="null">
        Datos de la posici&oacute;n actual:
	<table>
	<tr><td>Fecha: </td><td><input type="text" name="fecha"/></td></tr>
	<tr><td>Hora: </td><td><input type="text" name="hora"/></td></tr>
	<tr><td>Velocidad: </td><td><input type="text" name="velocidad"/></td></tr>
	</table>
    </form>

  </div>

</body>

</html>
<%
}
%>
